In [1]:
import numpy as np
%matplotlib notebook
import matplotlib.pyplot as plt
import ipywidgets as widgets
from maux import init_subplot, smart_ticklabel
from mtest import true_false_test

Derivácia funkcie

V nasledujúcich príkladoch budeme kresliť grafy elementárnych funkcií spolu s ich deriváciami. To, že derivácia je správne vyrátaná, budeme overovať graficky. Skúška správnosti pozostáva z nakreslenia dotyčnice grafu funkcie pre vybrané body. Predpis pre dotyčnicu grafu funkcie $f$ v bode $[a,f(a)]$ má tvar $$y = f'(a) (x-a) + f(a).$$

Dokumentácia:

Príklad

Zostrojenie derivácie funkcie $$y = x^3+3x^2-9x-10.$$ Správnosť riešenia je overená graficky.

In [2]:
####
#### nakreslenie grafu funkcie a jej derivácie
####

## vstupné údaje
def f(X): return X ** 3 - 3 * X ** 2 - 9 * X - 10 # ufunc verzia funkcie
X = np.linspace(-2, 6, 8*10+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu

def df(X): return 3 * X ** 2 - 6 * X - 9 # ufunc verzia derivácie
dX = X # tie prvky z X, ktoré patria do definičného oboru derivácie

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(8, 6) # veľkosť obrázka (východzia hodnota je 6x4)

## diagram
init_subplot(ax) # inicializácia diagramu: vytvorí sa pravoúhla súradnicová sústava
#ax.grid() # pravoúhla sieť
ax.set_ylim(-40, 45) # ohraničenie hodnôt pre os y

## graf funkcie
ax.plot(X, f(X), label=r"funkcia $y = x^3+3x^2-9x-10$")

## graf derivácie
ax.plot(dX, df(dX), label=r"derivácia $y = 3x^2+6x-9$")

## skúška správnosti
true_false_test(ax, f, dX, df)

## legenda
plt.figlegend(loc='upper center')

### archivácia obrázka
#fig.savefig("<meno súboru>.png")

### samotné zobrazenie
fig.show()

Derivácie základných elementárnych funkcií

V nasledujúcej tabuľke sú derivácie základných elementárnych funkcií ($c$ je reálna konštanta): \begin{align} (c)' & = 0, \\ (x^n)' & = nx^{n-1} \quad (n \in R \setminus \{0\}), \\ (a^x)' & = a^x \ln a, &&\text{špeciálne}\ (e^x)' = e^x, \\ (\log_a x)' & = \frac{1}{x \ln a}, &&\text{špeciálne}\ (\ln x)' = \frac{1}{x}, \\ (\sin x)' & = \cos x, \\ (\cos x)' & = -\sin x, \\ (\tan x)' & = \frac{1}{\cos^2 x}, \\ (\arcsin x)' & = \frac{1}{\sqrt{1-x^2}}, \\ (\arccos x)' & = -\frac{1}{\sqrt{1-x^2}}, \\ (\arctan x)' & = \frac{1}{1+x^2}. \end{align}

Úloha

Overte graficky, že derivácie základných elementárnych funkcií sú správne vyrátané.

In [3]:
####
#### šablóna riešenia pre funkciu a^x
####

### zadanie

## vstupné údaje
a = 2 # riešenie otestujte aj pre inú hodnotu parametra a, napr. pre a = 3 alebo a = np.e
def f(X): return a ** X
X = np.linspace(-2, 2, 4*10+1)

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(6, 6)

## diagram
init_subplot(ax)
ax.set_aspect('equal')
ax.set_ylim(0, 4.3)

## graf funkcie
ax.plot(X, f(X), label=r"funkcia $y = {}^x$".format(a))

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX = X # tento údaj upravte

## graf derivácie
# ax.plot(dX, df(dX), label=r"derivácia $y = \ldots$") # tento údaj upravte

## skúška správnosti
# true_false_test(ax, f, dX, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()
In [4]:
####
#### šablóna riešenia pre funkciu log_a x
####

### zadanie

## vstupné údaje
a = 2 # riešenie otestujte aj pre inú hodnotu parametra a, napr. pre a = 3 alebo a = np.e
def f(X): return np.log(X) / np.log(a)
X = np.linspace(0, 4, 4*100+1)
X = X[X != 0] # číslo 0 nepatrí do oboru definície

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(6, 6)

## diagram
init_subplot(ax)
ax.set_aspect('equal')
ax.set_ylim(-2.2, 2.2)

## graf funkcie
ax.plot(X, f(X), label=r"funkcia $y = \log_{{{0}}}\,x$".format(a))

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX = X # tento údaj upravte

## graf derivácie
# ax.plot(dX, df(dX), label=r"derivácia $y = \ldots$") # tento údaj upravte

## skúška správnosti
# true_false_test(ax, f, dX, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()
In [5]:
####
#### šablóna riešenia pre funkciu sínus
####

### zadanie

## vstupné údaje
def f(X): return np.sin(X)
X = np.linspace(-2*np.pi, 4*np.pi, 12*10+1)

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(9, 3)

## diagram
init_subplot(ax)
ax.set_aspect('equal')

## x-ová os
xtick_numerators = range(-4, 8+1)
ax.set_xticks([n * np.pi / 2  for n in xtick_numerators])
ax.set_xticklabels([smart_ticklabel(n, r"\pi", 2)  for n in xtick_numerators])

## y-ová os
ax.set_ylim(-2.1, 2.1)

## graf funkcie
ax.plot(X, f(X), label=r"funkcia $y = \sin\,x$")

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX = X # tento údaj upravte

## graf derivácie
# ax.plot(dX, df(dX), label=r"derivácia $y = \ldots$") # tento údaj upravte

## skúška správnosti
# true_false_test(ax, f, dX, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()
In [6]:
####
#### šablóna riešenia pre funkciu kosínus
####

### zadanie

## vstupné údaje
def f(X): return np.cos(X)
X = np.linspace(-2*np.pi, 4*np.pi, 12*10+1)

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(9, 3)

## diagram
init_subplot(ax)
ax.set_aspect('equal')

## x-ová os
xtick_numerators = range(-4, 8+1)
ax.set_xticks([n * np.pi / 2  for n in xtick_numerators])
ax.set_xticklabels([smart_ticklabel(n, r"\pi", 2)  for n in xtick_numerators])

## y-ová os
ax.set_ylim(-2.1, 2.1)

## graf funkcie
ax.plot(X, f(X), label=r"funkcia $y = \cos\,x$")

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX = X # tento údaj upravte

## graf derivácie
# ax.plot(dX, df(dX), label=r"derivácia $y = \ldots$") # tento údaj upravte

## skúška správnosti
# true_false_test(ax, f, dX, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()
In [7]:
####
#### šablóna riešenia pre funkciu tangens
####

### zadanie

## vstupné údaje
def f(X): return np.tan(X)
X = np.linspace(-(5/2)*np.pi, (5/2)*np.pi, 10*100+1)

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(9, 8)

## diagram
init_subplot(ax)
ax.set_aspect(1/2*np.pi)

## x-ová os
xtick_numerators = range(-5, 5+1)
ax.set_xticks([n * np.pi / 2  for n in xtick_numerators])
ax.set_xticklabels([smart_ticklabel(n, r"\pi", 2)  for n in xtick_numerators])

## y-ová os
ax.set_ylim(-5, 5)

## graf funkcie
color = ax.plot([], [], label=r"funkcia $y = \tan\,x$")[0].get_color()
for n in range(-5, 5, 2):
    I = X[(n*np.pi/2 < X) & (X < (n+2)*np.pi/2)]
    ax.plot(I, f(I), c=color)

## asymptoty bez smernice
Ay = np.linspace(-5, 5)
for n in range(-5, 5+1, 2):
    Ax = np.ones(len(Ay)) * n * np.pi/2
    ax.plot(Ax, Ay, 'k--', lw=1)

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX = X # tento údaj upravte

## graf derivácie
# ax.plot(dX, df(dX), label=r"derivácia $y = \ldots$") # tento údaj upravte

## skúška správnosti
# for n in range(-5, 5, 2):
#     dI = X[(n*np.pi/2 < X) & (X < (n+2)*np.pi/2)]
#     true_false_test(ax, f, dI, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()
In [8]:
####
#### šablóna riešenia pre funkciu arkussínus 
####

### zadanie

## vstupné údaje
def f(X): return np.arcsin(X)
X = np.linspace(-1, 1, 2*100+1)

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(4, 6)

## diagram
init_subplot(ax)
ax.set_aspect('equal')

# y-ová os
ytick_numerators = range(-2, 2+1)
ax.set_yticks([n * np.pi / 4  for n in ytick_numerators])
ax.set_yticklabels([smart_ticklabel(n, r"\pi", 4)  for n in ytick_numerators])

## y-ová os
ax.set_ylim(-np.pi/2*1.1, np.pi/2*1.1)

## graf funkcie
ax.plot(X, f(X), label=r"funkcia $y = \arcsin\,x$")

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX = X # tento údaj upravte

# ## graf derivácie
# ax.plot(dX, df(dX), label=r"derivácia $y = \ldots$") # tento údaj upravte

## skúška správnosti
# true_false_test(ax, f, dX, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()
In [9]:
####
#### šablóna riešenia pre funkciu arkuskosínus
####

### zadanie

## vstupné údaje
def f(X): return np.arccos(X)
X = np.linspace(-1, 1, 2*100+1)

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(4, 9)

## diagram
init_subplot(ax)
ax.set_aspect('equal')

# y-ová os
ytick_numerators = range(-2, 4+1)
ax.set_yticks([n * np.pi / 4  for n in ytick_numerators])
ax.set_yticklabels([smart_ticklabel(n, r"\pi", 4)  for n in ytick_numerators])

## y-ová os
ax.set_ylim(-np.pi/2*1.1, np.pi*1.1)

## graf funkcie
ax.plot(X, f(X), label=r"funkcia $y = \arccos\,x$")

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX = X # tento údaj upravte

# ## graf derivácie
# ax.plot(dX, df(dX), label=r"derivácia $y = \ldots$") # tento údaj upravte

## skúška správnosti
# true_false_test(ax, f, dX, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()
In [10]:
####
#### šablóna riešenia pre funkciu arkustangens

### zadanie

## vstupné údaje
def f(X): return np.arctan(X)
X = np.linspace(-6, 6, 10*10+1)

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(9, 4)

## diagram
init_subplot(ax)
ax.set_aspect('equal')

## y-ová os
ax.set_ylim(-np.pi/2*1.1, np.pi/2*1.1)
ytick_numerators = range(-1, 1+1)
ax.set_yticks([n * np.pi / 2  for n in ytick_numerators])
ax.set_yticklabels([smart_ticklabel(n, r"\pi", 2)  for n in ytick_numerators])

## graf funkcie
ax.plot(X, f(X), label=r"funkcia $y = \arctan\,x$")

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX = X # tento údaj upravte

## graf derivácie
# ax.plot(dX, df(dX), label=r"derivácia $y = \ldots$") # tento údaj upravte

## skúška správnosti
# true_false_test(ax, f, dX, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()